home *** CD-ROM | disk | FTP | other *** search
/ NOVA - For the NeXT Workstation / NOVA - For the NeXT Workstation.iso / Newsletters / GEnieUnixNews / unxnl-01.92 < prev    next >
Text File  |  1992-12-27  |  32KB  |  712 lines

  1.                  
  2.           _  _  _   _  _   _
  3.          // // //| // // \//     N E W S
  4.         //_// // |// //  /\\     Vol 3, Issue 1 - January 1992
  5.       R o u n d T a b l e (tm)
  6.                         
  7.    Items of interest to participants of the GEnie Unix RoundTable
  8.                    
  9.        The RoundTable SysOps are:
  10.        Andy Finkenstadt....ANDY       Rick Mobley.........LRARK
  11.        Gary Smith..........GARS       Brian Riley.........DELPHI
  12.                    All Unix SysOps.....UNIXSYSOPS$
  13.    We strongly encourage you to contact any or all of us if you have -ANY-
  14.  comments or suggestions. This is -YOUR- RoundTable. We are here to make
  15.  your participation as pleasant and beneficial as possible.
  16.                            
  17.  ######  HOT NEWS FLASH !  ######  HOT NEWS FLASH ! ######  HOT NEWS FLASH !
  18.        
  19.   GEnie Unix RoundTable has added guru level support for NeXT (Cat. 20),
  20.   Sun (Cat. 19), Sequent (Cat. 21) and Mark Williams Coherent (Cat. 18). 
  21.   Watch for expanding coverage in the Support Categories in the Bulletin
  22.   Board, more files in the library, and a detailed report next newsletter.
  23.         
  24.  ######  HOT NEWS FLASH !  ######  HOT NEWS FLASH ! ######  HOT NEWS FLASH !
  25.     
  26.  ED: editor notes - new start (GARS) Gary Smith
  27.  --
  28.         
  29.    We have elected to change the format of the Unix RoundTable newsletter 
  30.  to bring it closer into compliance with what we perceive as our charter.
  31.  Rather than a hodge-podge of articles, the newsletter will now be more
  32.  in tune to the needs of those wanting to know more about Unix, whether they
  33.  are starting from scratch or already come to the table with a array of 
  34.  skills.
  35.                
  36.    Beginning this issue we will be presenting series of tutorials aimed at
  37.  increasing your understanding of Unix. Unix represents a toolkit of ready
  38.  to use modules. Like a carpenter or mechanic the tools are worthless if you
  39.  don't know how to use them. It is entirely possible to drive a screw into
  40.  a board with a hammer, but the results are much more aesthetically pleasing
  41.  if you use a screwdriver. The end product will function better, as well.
  42.          
  43.    This is also true of Unix. You have to gain a margin of skill equal to
  44.  the tasks you wish to accomplish. Fellow SysOp, Rick Mobley, and I will
  45.  be helping you with vi and shells in this issue. Andy and Brian will help
  46.  develop your skills in other areas in a February issue. These are going to
  47.  be serial tutorials, with each section taking the reader to a new level.
  48.           
  49.    There will still be short scripts, RoundTable news and humor pieces. 
  50.  The focus will just change to hands-on development. It must be noted here
  51.  that you should try any exercises presented. Like riding a bicycle and
  52.  dancing, computer usage is an acquired skill that can only be improved by
  53.  doing.
  54.              
  55.    We invite your feedback. Do you approve or disapprove of the change in
  56.  format? Tell us. We _really_ do want to know. 
  57.            
  58.    We also invite your contributions. Please feel free... no, encouraged...
  59.  to start your own series. I can think of at least a dozen of our regulars
  60.  I would love to sit at the feet of, as each shared his/her knowledge.
  61.                
  62.  Library Handy Hint:  How to find general help files
  63.  ------------------
  64.  Use the browse feature with FAQ as your keyword. We have several help
  65.  files that follow the 'Frequently Asked Questions' format, and will
  66.  be adding more.     
  67.    
  68.  FAST and NASTY, DOWN  and  DIRTY:  quick  fix scripts that do something
  69.  --------------------------------
  70.           
  71.  Harald.Eikrem@delab.sintef.no on Usenet comp.unix.shell newsgroup offered
  72.  this quick test. 
  73.             
  74.  Subject: Dirtiest little sh test for program existence...
  75.                
  76.  I just discovered this little nice (:) method which kind of tests the
  77.  existence of an executable within $PATH.  It goes like this:
  78.           
  79.  #!/bin/sh
  80.  prog=$1
  81.  if [ ! -z "$prog" ]; then
  82.          case "`(. $prog 2>&1)`" in
  83.              *"not found"*) echo $prog not found ;;
  84.              *)             echo $prog found ;;
  85.          esac
  86.  fi
  87.        
  88.  So what do you people think?  Are there shell implementations that will
  89.  puke on this one?
  90.                    
  91.  --Harald E
  92.           
  93.  C-shell application note  How to put the current directory in the prompt
  94.  ------------------------   (ANDY) Andrew Finkenstadt
  95.        
  96.  A recent question in the Unix Bulletin Board resulted in a quick
  97.  search through my .cshrc, the C-Shell control file.  This file is
  98.  executed each time /bin/csh is invoked, including as a subshell
  99.  beneath an application program like 'vi' or 'mail'.  It is
  100.  distinct from .login which is executed once each time you log in
  101.  and run /bin/csh as your login shell.  (/bin/csh is the one that
  102.  usually has the % prompt.)
  103.             
  104.  The question was "How do I get my prompt to reflect the current
  105.  directory on my Unix computer?"   Well, on an MS-DOS or DR-DOS
  106.  computer you would just set the prompt equal to the command that
  107.  does this:
  108.          
  109.    C> SET PROMPT=$P$G
  110.    C:\>
  111.                 
  112.  This doesn't quite work under Unix.
  113.             
  114.  However, all is not lost.  The C-shell does allow for
  115.  redefinition (or aliasing) of commands with the 'alias' command.
  116.  The trick to making the prompt show the current directory is to
  117.  redefine those commands which change the current directory into
  118.  something that changes the prompt after doing the actual change.
  119.              
  120.  The following set of commands will redefine the 'cd', 'pushd',
  121.  and 'popd' commands of the C-shell to set the prompt correctly.
  122.            
  123.         #!/bin/csh
  124.         # ~/.cshrc
  125.         # Copyright 1991, The GEnie Unix RoundTable.
  126.         # All rights reserved.  Freely redistributable
  127.         # so long as this copyright notice remains
  128.         # intact.
  129.               
  130.         # set the variable mysystem = the name of the system
  131.         # (useful in multi-machine network environs)
  132.         set mysystem=`uname`
  133.                
  134.         # Equinox megaport has tty+aa for alternate terminal
  135.         # we like a visual indication of this on the prompt
  136.         if (`tty|cut -c9-9` == '+') then
  137.            set vt=${mysystem}::
  138.         else
  139.            set vt=${mysystem}:
  140.         endif
  141.                 
  142.         # now redefine the actual commands to do
  143.         # 1: the actual command
  144.         # 2: reset the prompt to the right string
  145.         # 3: read a file called .readme for those users who
  146.         #    might get lost or developers who need reminders
  147.         #    about what belongs in certain directories
  148.         alias cd '\!#; reprompt; cat -s .readme'
  149.         alias pushd '\!#; reprompt; cat -s .readme'
  150.         alias popd '\!#; reprompt; cat -s .readme'
  151.             
  152.         # this line resets the prompt to what we want it to be
  153.         # each time 'reprompt' is typed, which happens
  154.         # automagically during the redefined cd command.
  155.         alias reprompt 'set prompt="{${vt}${cwd}:!} "'
  156.             
  157.         # and make sure our first prompt is right, too.
  158.         reprompt
  159.         # end of ~/.cshrc
  160.             
  161.  Upload Contest Winner Announced   (ANDY) Andrew Finkenstadt
  162.  -------------------------------   Unix RoundTable Lead SysOp
  163.           
  164.  The Unix RoundTable Sysops are pleased to announce the winner in
  165.  our December 1991 Upload Contest.  A.ROSENBALM [J.] is our winner with
  166.  timely uploads of some great NeXT workstation software.  He won
  167.  both parts of our contest - the most number of files and the most
  168.  number of bytes for the period in question - and will receive two
  169.  free days of his choice in the Unix RoundTable as a result.
  170.        
  171.  It's not too late to win in January 1992 or future months either.
  172.  For the complete rules, download the file CONTEST.RULES from the
  173.  Unix RoundTable Library on page 160.
  174.                  
  175.  Shell Programming (Script Style) (LRARK) Ricky Mobley
  176.  -----------------
  177.       
  178.  This is the first of many articles that I will contribute to the newsletter
  179.  in order to get some of you familiar with the power that awaits you at the
  180.  command prompt. I have chosen 'sh' as my shell of choice since it is available
  181.  on almost every Unix system and therefore considered the most common shell. I
  182.  do not intend to start a 'shell war' discussion as everyone has their own
  183.  favorite and they are all very usable. Simply put - learn this and the rest
  184.  will make sense and become easier to grasp.
  185.        
  186.  This first submission will only deal with the basics. If you don't understand
  187.  the basics, you will find yourself struggling later on. I do not claim to be
  188.  an expert here, so any errors should be brought to my attention and I will
  189.  give you credit for the find in a later issue.
  190.      
  191.  So, here we go!
  192.       
  193.  If we had to define the purpose of /bin/sh, it could best be summed up with
  194.  the statement: "A command interpreter that can accept input from any input
  195.  device, whether that be a file, keyboard or a port."
  196.        
  197.  Hopefully, if we can get input, we can process it or manipulate it using any
  198.  one of a few hundred tools available in /bin or /usr/bin. You may even write
  199.  your own script or 'C' program and really get creative.
  200.        
  201.  Sh is a command interpreter and a programming language. It is not a part of
  202.  the operating system kernel, but an ordinary user program that reads commands
  203.  entered at the keyboard and arranges for their execution. 
  204.            
  205.  This may sound familiar to some that are moving from an MSDOS environment,
  206.  I think you call them 'batch' files. But that is where the similarity ends.
  207.  Now we can handle keyboard intervention, input from other files and even pass
  208.  our results in and out of other commands or scripts.
  209.          
  210.  A simple command is a sequence of words separated by blanks or tabs. The first
  211.  word in the sequence (numbered as 0), usually specifies the name of a command.
  212.  Any remaining words, with a few exceptions, are passed to that command.
  213.          
  214.  Example:
  215.  $ echo "Hello World!"
  216.         
  217.  Results:
  218.  Hello World!
  219.  $
  220.            
  221.  Remember writing that first program? Instant gratification! Results, and
  222.  sometimes it was even predictable.
  223.           
  224.  The value of a simple command is its exit value if it ends normally or status
  225.  if it ends abnormally.
  226.             
  227.  We can use this exit value or status to test for proper operation of our
  228.  program and send the user messages if it fails. This is often included in
  229.  scripts so the user has a way to quickly determine the proper syntax necessary
  230.  to achieve the desired results of using such a program.
  231.          
  232.  For instance; I have a program called 'wipe' that I might use to completely
  233.  erase a diskette. Since it is not a known fact as to where or which device
  234.  might be used, I can choose to prompt you, or on a failure I can simply give
  235.  you a syntax or a usage statement.
  236.             
  237.  Example:
  238.  $ wipe
  239.            
  240.  Results:
  241.  wipe - device name missing.
  242.  Usage: wipe [device-name]
  243.  $
  244.            
  245.  A command is either a simple command or a control command.
  246.           
  247.  A pipeline is a sequence of one or more commands separated by a | (vertical
  248.  bar) or by a ^ (circumflex or caret). In a pipeline, the standard output of
  249.  each command becomes the standard input of the next command. Each command
  250.  runs as a separate process, and the shell waits for the last command to end.
  251.             
  252.  You will hear programmers refer to this as a 'pipe'. You can chain several
  253.  commands together and achieve some dramatic results as long as you are
  254.  careful.
  255.           
  256.  A filter is a command that reads its standard input, transforms it in some
  257.  way, then writes it to its standard output. A pipeline normally consists of
  258.  a series of filters. The exit value of a pipeline is the exit value of the
  259.  last command.
  260.           
  261.  If a command fails along a pipeline using this technique the exit value may
  262.  not indicate an error. Only the last command can pass the exit value back
  263.  to the shell. The exception to this might be a core dump.
  264.           
  265.  A list is a sequence of one or more pipelines separated by ; (semicolon),
  266.  & (ampersand), && (two ampersands), or || (two vertical bars) and optionally
  267.  ended by a ; (semicolon) or an & (ampersand). These separators and
  268.  terminators have the following effects:
  269.                
  270.   ;   Causes sequential execution of the preceding pipeline (the shell waits
  271.       for the pipeline to finish).
  272.             
  273.   &   Causes asynchronous execution of the preceding pipeline (the shell does
  274.       not wait for the pipeline to finish).
  275.           
  276.   &&  Causes the list following it to be executed only if the preceding
  277.       pipeline returns a zero exit value.
  278.            
  279.   ||  Causes the list following it to be executed only if the preceding
  280.       pipeline returns a nonzero exit value.
  281.              
  282.  So thats how we test it! Ok lets give it a try. So I have this list of items
  283.  that I want to sort and remove duplicates and output to the screen. Lets get
  284.  some tools. First we need a list of items, ok I'll grab a file off of the
  285.  system called 'list_of_items' and hmmmm, I suppose I can just use 'cat' to
  286.  display them. Now lets see, uhhhh, sort, sort, yea 'sort' thats it, and now
  287.  what do I have to remove duplicates. Something that would only give me the
  288.  items that were unique, lets see here..... 'uniq'. Ok, I think we are ready
  289.  to go.
  290.               
  291.  $ cat list_of_items
  292.  cat
  293.  dog
  294.  pig
  295.  horse
  296.  dog
  297.  duck
  298.  $
  299.             
  300.  $ cat list_of_items | sort | uniq
  301.  cat
  302.  dog
  303.  duck
  304.  horse
  305.  pig
  306.  $
  307.                
  308.  Presto! Sorry, no magic here just the desired results.
  309.           
  310.  The shell treats any word that begins with a # (number sign) as a comment and
  311.  ignores that word and all characters following up to the next new-line
  312.  character.
  313.                
  314.  So now our program takes shape and we can add comments by using the # to keep
  315.  track of what we are trying to do.
  316.              
  317.  # A program to view a list of directories.
  318.  # Ricky Mobley 30 Sep 1990
  319.  echo Sub-directories of `pwd`          # Get the current directory to display.
  320.  ls -l | grep "^d" || echo None found.  # Only display lines that begin with
  321.                                         # drwx------. 
  322.              
  323.  Here we 'echo' "Sub-directories of " using 'pwd' to get the 'print working
  324.  directory'. Notice the grave-accent goes the other way to get this command
  325.  to execute before we actually echo the results. Then we run 'ls -l' and pass
  326.  the results through a pipe to 'grep "^d"' where we look for a "d" at the
  327.  beginning of the line. If this fails, we didn't find any directories, then
  328.  we echo "None found." and exit with a status of 0. Remember 'echo' was the
  329.  last command in the pipe, so the program executed properly.
  330.              
  331.  Next time we will continue with the basics and keep expanding our knowledge
  332.  to grow some more robust scripts. Who knows, we might just hit upon something
  333.  that you can't live without.
  334.            
  335.  Ricky Mobley [lrark]
  336.  Little Rock, AR
  337.               
  338.  vi - part 1, introduction  (GARS) Gary Smith
  339.  ==   ------  ------------
  340.                         
  341.    A tutorial on the Unix visual text editor from the GEnie Unix RoundTable
  342.                          
  343.   -- abstract --
  344.                  
  345.    This will be a multi-part tutorial on vi(), the Unix full screen editor
  346.  most commonly encountered on all *nix platforms. Part 1 (this session) 
  347.  will provide an introduction to vi and provide a quick start overview so
  348.  neophytes may use the power of vi() immediately, even if limited to basic
  349.  edit functions. 
  350.                  
  351.    Subsequent articles will take the reader deeper into the mechanics of
  352.  vi(), and should prove to be a valuable reference to even long time users
  353.  of vi(). 
  354.                       
  355.    Like many processes encountered in Unix, vi is one of those that becomes
  356.  bottomless. The more you know about it, the more you will realize there is
  357.  more to know. I can not hope to cover all possible contingencies one might
  358.  encounter using vi. I will not even pretend it is possible. I do intend that
  359.  this series will prove to be a valuable asset in any user's reference file.
  360.                    
  361.   -- requirements --
  362.                       
  363.    Using vi is not a spectator sport. If at all possible you should be sitting
  364.  in front of a Unix worksation or terminal served by a Unix system and try the
  365.  various operations as they are introduced to you. This can be your own Unix
  366.  or Xenix system, a terminal at work or your own personal computer tied locally
  367.  or via dial up lines to a Unix system. One of the beauties of vi is that it 
  368.  will function the same on all the above.
  369.                       
  370.  -- setting up --
  371.                      
  372.    The primary reason that vi is so universal as noted in the preceding 
  373.  paragraph is that it is curses oriented. That means that anyone using vi can
  374.  thank Mark Horton for making their vi session function the same no matter
  375.  what terminal they are using, though many terminals may use dramatically
  376.  different sets of control codes to do things like clear the screen. Curses
  377.  looks at your user profile (.profile or .login) to determine your terminal
  378.  type then access the terminfo or termcap directories to fetch the appropriate
  379.  code to do what you tell vi you wish to do next. vi itself addresses a virtual
  380.  terminal with backspace, delete word and so on. It is curses and the terminal
  381.  definitions that translate these virtual commands into terminal specific ones.
  382.                 
  383.    The first thing that is necessary then before anyone can begin a vi edit
  384.  session is insure the system knows what terminal you are using. To do this,
  385.  simply type
  386.            
  387.       echo $TERM                            / carriage return will be assumed
  388.                                               on all commands
  389.             
  390.    The system will respond with the terminal type it thinks you are using. If
  391.  you are using a ms-dos computer logged into a public access Unix system the
  392.  response should be
  393.            
  394.        ansi
  395.            
  396.    If terminal types are a total mystery to you ask your SysAdmin. He/she will
  397.  be able to tell you if you are configured correctly. If you are on your own,
  398.  try looking in /etc/termcap on BSD and /usr/lib/terminfo to determine your
  399.  terminal type. These are quite different structured databases, but both are
  400.  designed to provide the character-graphics information required by curses.
  401.             
  402.    If the system responds incorrectly and you know your terminal type, you can
  403.  easily correct the problem by typing the following:
  404.           
  405.       TERM=terminal-type ; export TERM      / if you are using Bourne shell
  406.                                               or Korn shell 
  407.       -or-
  408.       setenv TERM terminal-type             / if you are using C shell
  409.              
  410.    It must be noted that this setting of the terminal type will only be valid
  411.  for this login. To make the correction permanent the appropriate terminal
  412.  type must be correctly defined in your user profile. Once you have learned how
  413.  to use vi, you can do this yourself, provided you have permission to alter 
  414.  your user .profile or .login (C-shell only). If this is not your system have
  415.  your SysAdmin make the change.
  416.              
  417.   -- general thoughts --
  418.             
  419.    Whether you realize it or not, the ability to edit files can safely be
  420.  argued to be the single most important ability you should craft when using
  421.  a computer. When you set up communication parameters you are editing a file.
  422.  When you are establishing the correct switches in a make file you intend to
  423.  compile on your system, you do so with an editor.
  424.            
  425.    Fellow GEnie Unix RoundTable SysOp, Rick Mobley (LRARK), makes the 
  426.  observation that if you are using ms-dos you should learn edlin, the line
  427.  oriented editor available on ALL ms-dos systems. If you are using Unix you
  428.  should learn to use ed(), the line oriented editor available on ALL Unix
  429.  and Unix-like platforms. No matter what system you found yourself in front of,
  430.  if you could perform the basic, line-oriented editing, you would at least have
  431.  a start.  Rick makes a valid point.
  432.            
  433.    Most vi tutorials make this same assumption, and include learning ed() as
  434.  part of learning vi. There is another reason for this in Unix. vi is a lineal
  435.  descendant of ed and can perform all of the same functions as ed. I am NOT
  436.  going to teach ed as part of this tutorial. I am going to make this strong
  437.  admonishment. If you are not already familiar with ed, learn it now, and come
  438.  back to vi properly equipped. This will be the only assumption I make. It is
  439.  your responsibility to be prepared to learn vi by already knowing ed.
  440.             
  441.   -- a touch of history --
  442.               
  443.    As noted , ed() is the line oriented editor common to ALL Unix and Unix
  444.  clones. ex() is a much more powerful editor co-implemented by Bill Joy and
  445.  Chuck Haley that is actually a superset of ed(), and is seldom used by itself
  446.  except on hardcopy terminals. vi() is the visual subset of ex and was the 
  447.  first Unix application to employ curses(). Later you may wish to prove some
  448.  of this to yourself by calling a file to edit with ex() by typing
  449.                
  450.       ex filename
  451.                    
  452.       then invoke vi from the ex colon prompt by typing
  453.              
  454.       :vi
  455.            
  456.       you will be instantly greeted with the vi screen
  457.             
  458.    If you would like to do this now, let's create a file called test. We will
  459.  be playing with test throughout this tutorial, so now is as good a time as
  460.  any to bring it up. If there is already a file named 'test' just name your
  461.  practice file 'vitest'.
  462.               
  463.  -- getting started --
  464.              
  465.    There are many ways to invoke any editor, including a null file (no name),
  466.  on a working file, or on an empty file as we are going to. Type 
  467.             
  468.       vi test
  469.                   
  470.       ... if you want to prove the ex/vi relation type  
  471.              
  472.       ex test
  473.                   
  474.       ex will respond
  475.             
  476.       "test" [New file]
  477.       :
  478.             
  479.    At the colon type 
  480.              
  481.        :vi
  482.           
  483.    Whether you invoked test with vi directly or with ex, then vi, the screen
  484.  will be empty except for a single column of tildes (~) down the left side.
  485.  A tilde only is vi's way of denoting an empty line. 
  486.                
  487.       ~
  488.       ~
  489.       ~
  490.       ~
  491.       ~
  492.       ~
  493.       ~
  494.       ~
  495.       ~
  496.       ~
  497.       "test" [New file]
  498.                    
  499.    This is also when you will probably discover if you have the right terminal
  500.  defined. If you gave the system the incorrect terminal type then the editor
  501.  may have just made a mess of your screen. This happens because it sends out
  502.  control codes for one kind of terminal to an unrelated terminal. If you don't
  503.  see a nice neat row of tildes on the left side of your screen and possibly a
  504.  message to the effect "test" [New file] on the last line, don't panic. Type
  505.             
  506.       :q!
  507.             
  508.    Then notify your SysAdmin, or if you are on your own system try to figure 
  509.  the correct terminal type to tell Unix. If you are using a Lear Siegler ADM-3a
  510.  or many CP/M systems like Kaypro-II try setting TERM=3a, a ms-dos machine will
  511.  work with TERM=ansi, many DEC terminals will be TERM=vt100, vt52 or vt102.
  512.                
  513.    Some keys you will want to locate immediately are ESC (escape), CR (enter,
  514.  return), DEL (rub) and the arrow keys. Your ESC may be labeled ALT. If you
  515.  have an ESC and an ALT (ms-dos) they are NOT the same! ESC is the correct
  516.  key you will come to love or hate very soon. If you don't have arrow keys, or
  517.  the cursor does not respond to them (once there is text - the cursor can not
  518.  move beyond the end of text in vi), don't panic. The h, j, k  and l keys will
  519.  position the cursor. Many experienced vi users who must deal with a variety
  520.  of terminal types prefer to use the letter keys as a matter of habit, thus
  521.  maintaining an absolutely flat playing field. If you use a variety of
  522.  terminals the more generic you can keep your commands the better. 
  523.              
  524.   -- modes --
  525.             
  526.    The first thing you MUST learn is that vi is modal. This one aspect drives
  527.  some users crazy. It also gives vi some of its advanced features and power. 
  528.  There two operating modes: 'text entry' and 'command' mode. (Some include 
  529.  last line operations as a third  mode). The _normal_ mode for vi is the 
  530.  command mode. Text entry mode is accessed from the command mode when you wish
  531.  to type in, insert or replace existing text. To exit the text entry mode you
  532.  press the ESCape key.
  533.                 
  534.   -- inserting text --
  535.                    
  536.    We are going to create some information in our test file so we will have 
  537.  something to practice edit commands on. Until you get familiar with some of
  538.  vi's commands try not to hit the wrong keys, because almost every key can
  539.  have some meaning to vi. 
  540.             
  541.    There are several ways to enter text. The most common are 
  542.         
  543.       - after the cursor
  544.       - insert before the cursor
  545.       - on the previous line
  546.       - on the next line
  547.          
  548.    As you will soon discover one of the really nice things about vi commands
  549.  is that nearly all commands are mnemonic.
  550.          
  551.    We are going to insert text. Type i (no carriage return) and type in the
  552.  following text, including intentional errors (hit carriage return at the end 
  553.  of each line and carriage return alone on any null lines). Notice that the
  554.  tilde will disappear and be replaced by text as characters occupy the line.
  555.            
  556.       This is a test file to be used for procticing various
  557.       commands using the vi editer.
  558.           
  559.       As we insert more text we insert more text we also
  560.       further complicat the file and add to possibilities
  561.       for edit practice.
  562.         
  563.       Later we will expand beyond one screen to test various
  564.       functions such as search and scrolling.
  565.       ~
  566.       ~
  567.       ~
  568.       ~
  569.       "test" [New file]
  570.               
  571.    Notice that the status line has not changed. It continues to list the file
  572.  name and fact that this is a new file. Once a status message is displayed it
  573.  will remain until you scroll past the bottom (not yet possible) or until you
  574.  execute a command that invokes a new status.
  575.              
  576.   -- cursor movement --
  577.             
  578.    Before you actually correct or add any text you need to know how to move
  579.  the cursor. Before you can move the cursor with any key other than BACKSPACE
  580.  you must exit text entry and return to the command mode. To do this hit the
  581.  ESCAPE key. There will usually be an audible beep to accompany the change to
  582.  command mode.
  583.            
  584.    If your terminal has cursor movement keys (arrow keys) and you wish to use
  585.  them press one of them now to see if the cursor moves in the direction of the
  586.  arrow. If you do not have cursor control keys, they do not work or you prefer
  587.  to learn using the generic (letter) keys they are as follows:
  588.         
  589.       h - move the cursor left one character (so will backspace)
  590.       j - move the cursor down one line
  591.       k - move the cursor up one line
  592.       l - move the cursor right one character (so will spacebar)
  593.        
  594.    Play with the cursor movement, insuring it does as expected and notice the
  595.  following:
  596.           
  597.    If you attempt to cursor past the end of a line vi will beep. If you attempt
  598.  to cursor left beyond the first character vi will beep. It will also beep if
  599.  you attempt to move beyond the last line or above the first line.
  600.          
  601.    To move the cursor more than one position preceed the cursor key (letter or
  602.  arrow) with the number of positions you wish to move.
  603.              
  604.       ie: 3j will jump the cursor down three lines.
  605.           2k will jump the cursor up two lines 
  606.                        
  607.           try 5<spacebar> or 5<backspace> 
  608.                
  609.        warning! spacebar and backspace do quite different things in command
  610.        mode (cursor movement) and text entry mode (insert spaces or backspace
  611.        over existing characters, deleting them in the process. 
  612.              
  613.    vi also provides you with some handy one keystroke cursor jumps.
  614.             
  615.       0 (zero) - will jump to the beginning of the current line
  616.       $ - will jump to the end of the current line
  617.       G - will jump to the first character last line of the file
  618.            
  619.       There are others which we will investigate later.
  620.         
  621.    You will also discover vi is case sensitive. A lower case g does something
  622.  quite different from the expected cursor jump. In this case vi will merely
  623.  beep.
  624.             
  625.  -- adding text --
  626.              
  627.    If you can't cursor above the first line, below the last line and beyond
  628.  text on the current line how do you add text to what is already there? We
  629.  have six basic ways to learn for now, all of them mnemonic.
  630.            
  631.       i - (i)nsert text before the cursor
  632.       I - (I)nsert text at the beginning of the current line
  633.       a - (a)ppend text after the cursor
  634.       A - (A)ppend text at the end of the current line
  635.       o - (o)pen a line one line below the current line
  636.       O - (O)pen a line one line above the current line
  637.            
  638.    Insure you are in the command mode by hitting ESC, type G to position your
  639.  cursor at the beginning of the last line and type o (letter oh). This will
  640.  open one line below. Add to our current test file the following line. 
  641.                
  642.       This is one more line of text to mess with added with the o command.
  643.                
  644.    Your entire file should resemble the following:
  645.                    
  646.       This is a test file to be used for procticing various
  647.       commands using the vi editer.
  648.                   
  649.       As we insert more text we insert more text we also
  650.       further complicat the file and add to possibilities
  651.       for edit practice.
  652.              
  653.       Later we will expand beyond one screen to test various
  654.       functions such as search and scrolling.
  655.            
  656.       This is one more line of text to mess with added with the o command.
  657.       ~
  658.       ~
  659.       ~
  660.       ~
  661.       "test" [New file]
  662.         
  663.  -- saving the file --
  664.          
  665.    This will conclude this session. To save your file for the next session
  666.  make sure you are in the command mode by hitting ESC a couple of times and 
  667.  type:
  668.          
  669.       ZZ   (no carriage return)
  670.             
  671.    -or-
  672.          
  673.    type:
  674.          
  675.    : (colon) which will jump to the status line (this is actually returning you
  676.  to the ex editor. Then type:
  677.           
  678.       :wq!  (carriage return)
  679.           
  680.    vi will save the file and post an exit status:
  681.         
  682.       ~
  683.       ~
  684.       "test" 11 lines, 373 characters
  685.           
  686.     __         _  Gary Smith           * ... uunet!ddi1!lrark!glsrk!gars  *
  687.    / _' _   _ (_' P. O. Drawer 7680    *      nuucp%ddi1@uunet.UU.NET     *
  688.   /__/ (_|_/ '._) Little Rock,AR 72217 * GEnie Forth RT  &  Unix RT SysOp *
  689.   ---------------        - U. S. A. -  * ph:501-227-7817,fax:501-228-9374 *
  690.           
  691.  ---------------    
  692.    REMINDER - This newsletter is being sent to you 'by request'. If you do
  693.  not wish to keep receiving it, e-mail a stop notice to GARS. On the other
  694.  hand, we would very much appreciate it if you would pass the word that we
  695.  do distribute this item near the tenth (10th) of the month of issue to any-
  696.  one on GEnie who requests it, and will gladly add any name that is requested
  697.  via the same route... e-mail to GARS.
  698.    P L E A S E  also remember contributions are most welcome. Please e-mail
  699.  items and/or suggestions to GARS.
  700.                               
  701.  (EOF)
  702.                              
  703.   Trademark and Copyright notices:
  704.   Unix is a Trademark of UNIX System Laboratories, Inc.; GEnie, LiveWire, and
  705.   RoundTable are Trademarks of General Electric Information Services  Company;
  706.   Xenix and ms-dos are Trademarks of  Microsoft  Corporation;
  707.                           
  708.  The contents of this newsletter are copyright (c) 1992 and may be copied whole
  709.  or in part only if  original  credit is included. The GEnie UNIX RoundTable is
  710.  not affiliated with AT&T or UNIX System Laboratories, Inc.
  711.  
  712.